package com.gzp.queue;

import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.DeliveryMode;
import javax.jms.JMSException;
import javax.jms.MapMessage;
import javax.jms.MessageProducer;
import javax.jms.ObjectMessage;
import javax.jms.Queue;
import javax.jms.Session;
import javax.jms.TextMessage;

import org.apache.activemq.ActiveMQConnectionFactory;

/**
 * 队列的生产者
 * 
 * @author Administrator
 *
 */
public class TestQueueProducer {

	private static final String brokerURL = "tcp://localhost:61616";// 在activemq/conf/activemq.xml中
	private static final String queueName = "queue-hello";

	public static void main(String[] args) throws JMSException {
		// 1、创建ConnectionFactory对象，指定服务端ip和端口
		ConnectionFactory factory = new ActiveMQConnectionFactory(brokerURL);
		// 2、使用ConnectionFactory对象创建一个Connection对象。
		Connection connection = factory.createConnection();
		// 3、开启连接，调用Connection中的start方法
		connection.start();
		// 4、使用Connection对象创建一个Session对象，第一个参数是是否开启事务，第二个参数是连接者的签收状态。
		Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
		// 5、使用Session对象创建一个Destination对象（topic、queue），此处创建一个Queue对象。
		Queue queue = session.createQueue(queueName);
		// 6、使用Session对象创建一个Producer对象。
		MessageProducer messageProducer = session.createProducer(queue);
		messageProducer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);// 设置当前生产者发送所有消息的持久性，默认是持久的。
		for (int i = 0; i < 10; i++) {// 直接发十条消息
			// 7、使用Session对象创建一个Message对象。这里创建一个TextMessage对象。
			TextMessage textMessage = session.createTextMessage();
//			textMessage = new ActiveMQTextMessage();// 也可以直接创建
			textMessage.setText("hello-mq" + i);
			if (i % 2 == 0) {
				textMessage.setStringProperty("flag", "加急");// 设置消息的String属性
			}
			textMessage.setJMSDeliveryMode(DeliveryMode.NON_PERSISTENT);// 设置当前消息的持久性，默认是持久的。
			textMessage.setJMSExpiration(10000);// 设置过期时间10秒，默认0为永不过期。
			textMessage.setJMSPriority(5);// 设置优先级，0-4表示普通消息，5-9表示加急消息，默认4。但这三个设置好像并没有什么卵用。
			// 8、使用Producer发送message。
			messageProducer.send(textMessage);
			// 发送MapMessage消息
			MapMessage mapMessage = session.createMapMessage();
			mapMessage.setInt("id", i);
			mapMessage.setString("name", "张三" + i);
			messageProducer.send(mapMessage);
			// 发送ObjectMessage消息
			ObjectMessage objectMessage = session.createObjectMessage();
			objectMessage.setObject(new User(i, "李四" + i, 15000.00 + i * 1000));
			messageProducer.send(objectMessage);
		}
		// 9、关闭资源。
		messageProducer.close();
		session.close();
		connection.close();
		System.out.println("消息发送成功！");
	}
}
